import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus' // 引入 Element Plus
import 'element-plus/dist/index.css' // 引入 Element Plus 样式
import router from './router'
import { createPinia } from 'pinia'
import { ElMessage } from 'element-plus'

// 添加全局错误处理
window.addEventListener('error', (event) => {
  console.error('全局错误捕获:', event);
  // 避免显示过多错误提示
  if (event.message && event.message.includes('Network Error')) {
    ElMessage.error('网络连接失败，将使用本地数据');
  }
});

// 添加未处理的 Promise 异常处理
window.addEventListener('unhandledrejection', (event) => {
  console.error('未处理的 Promise 异常:', event.reason);
  // 如果是网络相关错误，显示友好提示
  if (event.reason && 
      (event.reason.message?.includes('Network Error') || 
       event.reason.code === 'ERR_ADDRESS_UNREACHABLE')) {
    ElMessage.error('网络请求失败，应用将使用模拟数据');
    event.preventDefault(); // 阻止默认处理
  }
});

// const app = createApp(App)
// app.use(ElementPlus)                         // 注册 Element Plus
// app.mount('#app')

import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper'
let app: any = null
//判断是否为乾坤加载，如果不是渲染DOM节点
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  const appInstance = createApp(App);
  appInstance.use(router).use(ElementPlus).use(createPinia());
  
  // 添加全局错误处理
  appInstance.config.errorHandler = (err: unknown, vm: any, info: string) => {
    console.error('Vue 错误处理:', err, info);
    // 处理网络错误
    if (err instanceof Error && err.message.includes('Network Error')) {
      ElMessage.warning('网络请求出错，将使用模拟数据');
    }
  };
  
  appInstance.mount('#app');
} else {
  //加载乾坤生命周期
  //创建
  //挂载
  //卸载
  renderWithQiankun({
    mount(props) {
      console.log('--mount')
      app = createApp(App)
      app
        .use(router)
        .use(ElementPlus)
        .use(createPinia())
        
      // 添加全局错误处理
      app.config.errorHandler = (err: unknown, vm: any, info: string) => {
        console.error('Vue 错误处理:', err, info);
        // 处理网络错误
        if (err instanceof Error && err.message.includes('Network Error')) {
          ElMessage.warning('网络请求出错，将使用模拟数据');
        }
      };
      
      app.mount(
        (props.container
          ? props.container.querySelector('#app')
          : document.getElementById('app')) as Element,
      )
    },
    bootstrap() {
      console.log('--bootstrap')
    },
    update() {
      console.log('--update')
    },
    unmount() {
      console.log('--unmount')
      app?.unmount()
    },
  })
}
